﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using middleware.utiles;

namespace middleware.dominio.negocio
{
    public interface IMiddleware
    {
        Usuario usuarioCorrecto(string usuario, string contrasena);
        void SetUsuarioLogueado(Usuario usuario);
        Usuario GetUsuarioLogueado();
        void cargarComponentes(string directorioRaiz);

        List<ITipoBandejaEntrada> ObtenerTiposBandejasEntrada();
        List<ITipoBandejaSalida> ObtenerTiposBandejasSalida();
        List<IConsulta> ObtenerConsultasDinamicas();
        List<BandejaEntrada> ObtenerBandejasEntrada();
        List<BandejaSalida> ObtenerBandejasSalida();        

        BandejaEntrada CrearBandejaEntrada(ITipoBandejaEntrada tipoBandejaEntrada, string nombre, string configuracion);

        BandejaSalida CrearBandejaSalida(ITipoBandejaSalida tipoBandejaSalida, string nombre, string configuracion);

        Regla CrearRegla(string nombreAtributo, string condicion, string valorAtributo, BandejaSalida bandeja);

        void ComenzarProcesamiento();

        void DetenerProcesamiento();

        int ObtenerTiempoLectura();
        void ModificarTiempoLectura(int valor);

        Boolean ModificarBandejaEntrada(BandejaEntrada bandejaEntrada, ITipoBandejaEntrada tipoBandejaEntrada, string nombre, string configuracion);

        Boolean ModificarBandejaSalida(BandejaSalida bandejaSalida, ITipoBandejaSalida tipoBandejaSalida, string nombre, string configuracion);

        List<Regla> ObtenerReglas();

        Boolean ModificarRegla(Regla regla, string nombreAtributo, string condicion, string valorAtributo, BandejaSalida bandejaSalida);
        
        Boolean EliminarBandejaEntrada(BandejaEntrada bandejaEntrada);

        Boolean EliminarBandejaSalida(BandejaSalida bandejaSalida);

        Boolean EliminarRegla(Regla regla);

        List<Historico> ObtenerHistoricos(DateTime fecha, BandejaEntrada bandejaEntrada, string nombreAtributo, string valorAtributo);

        List<Log> ObtenerLogs(DateTime fecha, string linea);

        bool ControlarExistaBaseDatos();

        bool EstaCorriendoProceso();

        List<string[]> RealizarConsultaDinamica(IConsulta consulta, string[] filtros);

        string[] ObtenerNombresFiltros(IConsulta consulta);

        string[] ObtenerCabezalConsulta(IConsulta consulta);
    }
}
